package com.fengkai.filepost.pdfoutstream.test.ODsolutions;

import org.springframework.web.servlet.tags.form.InputTag;

/**
 * @author Fengkai
 * @creat 2023/4/11
 * 题目
 * 在通信系统中，一个常见的问题是对用户进行不同策略的调度，会得到不同的系统消耗和性能。
 * 假设当前有 n 个待串行调度用户，每个用户可以使用 A/B/C 三种不同的调度策略，不同的策略会消耗不同的系统资源。请你根据如下规则进行用户调度，并返回总的消耗资源数。
 * 规则：
 * 1、相邻的用户不能使用相同的调度策略，例如，第 1 个用户使用了 A 策略，则第 2 个用户只能使用 B 或者 C 策略。
 * 2、对单个用户而言，不同的调度策略对系统资源的消耗可以归一化后抽象为数值。例如，某用户分别使用 A/B/C 策略的系统消耗分别为 15/8/17。
 * 3、每个用户依次选择当前所能选择的对系统资源消耗最少的策略（局部最优），如果有多个满足要求的策略，选最后一个。
 */
public class UserScheduling {

    public static void main (String[] args) {

        int[][] input = new int[][] {{15,8,7},{12,20,9},{11,7,5}};
        System.out.println(userScheduling(input));

    }

    //贪心算法
    public static int userScheduling (int[][] input) {
        int result = 0;
        int preIndex = -1;
        int cache = 0;
        for (int i = 0; i < input.length; i++) {
            int tmp = Integer.MAX_VALUE;
            for (int j = 0; j < 3; j++) {
                if (j != preIndex && input[i][j] < tmp ) {
                    tmp = input[i][j];
                    cache = j;
                }
            }
            preIndex = cache;
            result += tmp;
        }
        return result;
    }
}
